package com.itany.corejava.code05_数组;

import java.util.Scanner;

/**
 * @author 石小俊
 * @date 2024年01月12日 16:48
 */
public class Test13_螺旋式数组 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入每一行元素的数量:");
        int num = sc.nextInt();
        int[][] arr = new int[num][num];

        // 定义x轴的最小值、最大值
        int minX = 0, maxX = num - 1;
        // 定义y轴的最小值、最大值
        int minY = 0, maxY = num - 1;
        // 定义数组元素的值的最小值
        int count = 1;
        while (minX <= maxX) {
            // 从左往右,arr[minY][minX]-arr[minY][maxX]
            for (int x = minX; x <= maxX; x++) {
                arr[minY][x] = count++;
            }
            // 当上述操作执行完成之后,y的最小值+1
            minY++;

            // 从上往下,arr[minY][maxX]-arr[maxY][maxX]
            for (int y = minY; y <= maxY; y++) {
                arr[y][maxX] = count++;
            }
            // 当上述操作执行完成之后,x的最大值部分全部完成,maxX-1
            maxX--;

            // 从右往左,arr[maxY][maxX]-arr[maxY][minX]
            for (int x = maxX; x >= minX; x--) {
                arr[maxY][x] = count++;
            }
            // 当上述操作执行完成之后,y的最大值部分全部完成,maxY-1
            maxY--;

            // 从下往上,arr[maxY][minX]-arr[minY][minX]
            for (int y = maxY; y >= minY; y--) {
                arr[y][minX] = count++;
            }
            // 当上述操作执行完成之后,y的最小值部分全部完成,minX+1
            minX++;
        }

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
    }
}
